Spring JDBC ব্যবহারের সময় ডাটাবেস অপারেশনের পারফরম্যান্স উন্নত করা গুরুত্বপূর্ণ, বিশেষত বড় অ্যাপ্লিকেশন বা জটিল ডাটাবেস অপারেশনের ক্ষেত্রে। কিছু সাধারণ Performance Optimization টেকনিক ব্যবহার করে ডাটাবেস অ্যাক্সেস আরও কার্যকর করা যায়।
একাধিক রেকর্ড ইনসার্ট বা আপডেট করার জন্য Batch Processing ব্যবহার করলে অপারেশন আরও দ্রুত হয়, কারণ একাধিক স্টেটমেন্ট একত্রে চালানো হয়।
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, "User " + i);
ps.setString(2, "user" + i + "@example.com");
}
@Override
public int getBatchSize() {
return 100; // 100 রেকর্ড একত্রে প্রসেস হবে
}
});
System.out.println("Batch insertion completed!");
PreparedStatement পুনরায় ব্যবহার করলে ডাটাবেসের লোড কমে এবং অপারেশন দ্রুত হয়।
String sql = "SELECT * FROM users WHERE email = ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
Connection Pooling ডাটাবেস কানেকশনের পুনঃব্যবহার নিশ্চিত করে, যা কানেকশন তৈরির সময় এবং রিসোর্সের অপচয় কমায়।
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setMaximumPoolSize(10); // Max 10 connections
return dataSource;
}
ডাটাবেস টেবিলে সঠিক ইনডেক্স যোগ করে কোয়েরি এক্সিকিউশন টাইম কমানো যায়।
CREATE INDEX idx_email ON users(email);
String sql = "SELECT * FROM users WHERE email = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
বড় ডাটাসেট ফিল্টার করার সময় Pagination ব্যবহার করলে পারফরম্যান্স উন্নত হয়।
String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{10, 20}, new BeanPropertyRowMapper<>(User.class));
যদি একাধিক রেকর্ড প্রসেস করতে হয়, তাহলে ResultSetExtractor ব্যবহার করলে পারফরম্যান্স আরও উন্নত হয়।
public class UserResultSetExtractor implements ResultSetExtractor<List<User>> {
@Override
public List<User> extractData(ResultSet rs) throws SQLException {
List<User> users = new ArrayList<>();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
users.add(user);
}
return users;
}
}
// JdbcTemplate query:
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserResultSetExtractor());
Lazy Loading বড় ডেটাসেট প্রসেস করার সময় ডেটা লোডিং বিলম্বিত করে। Fetch Size ব্যবহার করে ডেটা পর্যায়ক্রমে লোড করা যায়।
jdbcTemplate.setFetchSize(50); // প্রতি বার ৫০ রেকর্ড ফেচ করবে
String sql = "SELECT * FROM users";
jdbcTemplate.query(sql, rs -> {
while (rs.next()) {
System.out.println("User: " + rs.getString("name"));
}
});
Spring JDBC-তে Performance Optimization করার জন্য উপরের টেকনিকগুলো কার্যকরভাবে ব্যবহার করা যেতে পারে। বিশেষত:
সঠিক অপ্টিমাইজেশন টেকনিক ব্যবহার করে আপনি Spring JDBC-তে ডাটাবেস অ্যাক্সেস আরও দ্রুত এবং কার্যকর করতে পারবেন।
Read more